package cn.tedu.serializable;
/**本类用于测试序列化和反序列化*/

import java.io.*;

/**序列化:
 * 是指把程序中的JAVA对象，永久保存在磁盘中，相当于是写出的过程
 * 方向是out,对应的流是:ObjectOutputSteam
 * 反序列化:
 * 是指把已经序列化在文件中保存的数据，读取/恢复到JAVA程序中的过程
 * 方向是in,对应的流是:ObjectInputSteam*/
public class TestSerializable {
    public static void main(String[] args) {
        method1();//用于完成序列化
        method2();//用于完成反序列化
    }

    private static void method2() {
        ObjectInputStream in = null;
        try{
            //创建反序列化(输入)流对象
            in = new ObjectInputStream(new FileInputStream("C:\\kaifa\\ready\\1.1txe"));
            //通过反序列化流，读取恢复对象
            System.out.println(in.readObject());//需要重写，使其输出内容而不是地址值
//            Object o = in.readObject();
//            System.out.println(o);
            System.out.println("反序列化成功");
        }catch(Exception e){
            System.out.println("失败");
            e.printStackTrace();
        }finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void method1() {
        ObjectOutputStream out = null;
        try{
            out = new ObjectOutputStream(new FileOutputStream("C:\\kaifa\\ready\\1.1txe"));
            //指定序列化(输出)的对象
            Student obj = new Student("海绵宝宝",7,"深海999号",'男');
            out.writeObject(obj);
            System.out.println("恭喜你,序列化成功");
        }catch(Exception e){
            System.out.println("失败");
            e.printStackTrace();
        }finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
